home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.1 (Developer) [x86] / NeXT Step 3.1 Intel dev.cdr.dmg / NextDeveloper / Makefiles / app / bundle.make < prev    next >
Text File  |  1993-04-01  |  8KB  |  203 lines

  1. #
  2. #                                 bundle.make
  3. #
  4. # Inputs from Makefile.preamble (no defaults):
  5. #    BUNDLELDFLAGS - Additional flags passed to ld when linking bundles
  6. #    OTHER_CFLAGS - Flags passed to compiler (in addition to -g, -O, etc.)
  7. #    OTHER_LDFLAGS - Flags passed to ld (in addition to -ObjC, etc.)
  8. #    OTHER_OFILES - Additional relocatables that may be linked in
  9. #    OTHER_PRODUCT_DEPENDS - Other dependencies of this project
  10. #    OTHER_SOURCEFILES - Other source files maintained by .pre/postamble
  11. #    OTHER_GARBAGE - Additional files to be removed by make 'clean' 
  12. #
  13. #    MSGFILES - .msg files that should have msgwrap run on them
  14. #    DEFSFILES - .defs files that should have mig run on them
  15. #    MIGFILES - .mig files (no .defs files) that should have mig run on them
  16. #
  17. #    PRECOMPS - Precompiled headers that should be built before compilation 
  18. #    OTHER_INITIAL_TARGETS - Targets to be built before subprojects, etc.
  19. #
  20. #    DSTROOT - Virtual root directory prepended to $(INSTALLDIR)
  21. #
  22. # Inputs from Makefile.postamble (with defaults set by this file):
  23. #    MAKEFILES - Makefiles this project depends on (default = Makefile)
  24. #    DEFAULT_CFLAGS - All compiler flags for this level (default set below)
  25. #
  26. # Inputs from Makefile (avoid setting these, ProjectBuilder controls them):
  27. #    NAME - name of application
  28. #    LANGUAGE - langage in which the project is written (default "English")
  29. #    LOCAL_RESOURCES - localized resources (e.g. nib's, images) of project
  30. #    GLOBAL_RESOURCES - non-localized resources of project
  31. #
  32. #    CLASSES - Class implementation files in project.
  33. #    HFILES - Header files in project.
  34. #    MFILES - Other Objective-C source files in project. 
  35. #    CFILES - Other C source files in project. 
  36. #    PSWFILES - .psw files in the project
  37. #    PSWMFILES - .pswm files in the project
  38. #    SUBPROJECTS - Subprojects of this project
  39. #    BUNDLES - Bundle subprojects of this project
  40. #    OTHERSRCS - Other miscellaneous sources of this project
  41. #    OTHERLINKED - Source files not matching a standard source extention
  42. #    OTHERLINKEDOFILES - Other relocatable files to (always) link in.
  43. #
  44. #    APP_MAKEFILE_DIR - Directory in which to find generic set of Makefiles
  45. #    MAKEFILEDIR - Directory in which to find $(MAKEFILE)
  46. #    MAKEFILE - Top level mechanism Makefile (e.g., app.make, bundle.make)
  47. #    INSTALLDIR - Directory app will be installed into by 'install' target
  48. #
  49. # Outputs to common.make:
  50. #    PRODUCT_ROOT 
  51. #
  52.  
  53.  
  54. # Defaults for NeXT-specific Release Control options
  55. SRCROOT = .
  56. SYMROOT = .
  57. OBJROOT = .
  58.  
  59. # Set these in case this is a standalone case (much of this cruftiness has to do with sh's inability to operate on $$bun in the common.make subcomponents rule)
  60.  
  61. BUNDLE_DIR = $(SYMROOT)/$(NAME).bproj
  62. PRODUCT_ROOT = $(BUNDLE_DIR:.bproj=.bundle)
  63. BUNDLE = "$(PRODUCT_ROOT)/$(NAME:.bproj=)"
  64.  
  65. # ...and versions for installing the bundle.
  66. REL_BUNDLE_DIR = $(NAME).bproj
  67. REL_PRODUCT_ROOT = $(REL_BUNDLE_DIR:.bproj=.bundle)
  68. REL_BUNDLE = $(REL_PRODUCT_ROOT)/$(NAME:.bproj=)
  69.  
  70.  
  71. APP_MAKEFILE_DIR = /NextDeveloper/Makefiles/app
  72. include $(APP_MAKEFILE_DIR)/common.make
  73. include $(APP_MAKEFILE_DIR)/specialrules.make
  74.  
  75. all:: bundle
  76.  
  77. # bundle targets:
  78.  
  79. bundle:: 
  80.     @(evaled_rc_archs="$(RC_ARCHS)"; \
  81.     obj_dir=`echo $$evaled_rc_archs | sed 's/ /_/g'`_obj ; \
  82.     $(MAKE) project \
  83.         "OFILE_DIR = $(OBJROOT)/$$obj_dir" \
  84.         "PROJ_CFLAGS = $(NORMAL_CFLAGS)" \
  85.         "MAKEFILEDIR = $(MAKEFILEDIR)" \
  86.         "RC_CFLAGS = $(RC_CFLAGS)" \
  87.         "SRCROOT = $(SRCROOT)" \
  88.         "OBJROOT = $(OBJROOT)" \
  89.         "PRODUCT_ROOT = $(PRODUCT_ROOT)" \
  90.         "SYMROOT = $(SYMROOT)/sym" \
  91.         "SYM_DIR = $(SYMROOT)/sym" )
  92.  
  93. debug::
  94.     @(evaled_rc_archs="$(RC_ARCHS)"; \
  95.     obj_dir=`echo $$evaled_rc_archs | sed 's/ /_/g'`_debug_obj ; \
  96.     $(MAKE) project \
  97.         "OFILE_DIR = $(OBJROOT)/$$obj_dir" \
  98.         "PROJ_CFLAGS = $(DEBUG_CFLAGS)" \
  99.         "MAKEFILEDIR = $(MAKEFILEDIR)" \
  100.         "RC_CFLAGS = $(RC_CFLAGS)" \
  101.         "SRCROOT = $(SRCROOT)" \
  102.         "OBJROOT = $(OBJROOT)" \
  103.         "PRODUCT_ROOT = $(PRODUCT_ROOT)" \
  104.         "SYMROOT = $(SYMROOT)/sym" \
  105.         "SYM_DIR = $(SYMROOT)/sym" )
  106.         
  107. project:: $(INITIAL_TARGETS) subprojs bundles resources $(BUNDLE)
  108.  
  109. $(BUNDLE): $(PRODUCT_DEPENDS) $(PRODUCT_ROOT) $(SYM_DIR) 
  110.     @(if [ "`$(ECHO) $(OFILES) $(OTHER_OFILES) | wc -w`" != "       0" ] ; then \
  111.        cmd="$(CC) $(ALL_CFLAGS) -nostdlib $(BUNDLELDFLAGS) $(OFILES) $(OTHER_OFILES) -r -o $(BUNDLE)" ; \
  112.        echo $$cmd ; $$cmd ; \
  113.     else \
  114.        $(ECHO) Warning: Building empty bundle. ; \
  115.        $(TOUCH) $(SYM_DIR)/$(NAME:.bproj=).c ; \
  116.        $(CC) $(ALL_CFLAGS) -c $(SYM_DIR)/$(NAME:.bproj=).c -o $(BUNDLE) ; \
  117.     fi ; \
  118.     $(CHMOD) a+x $(BUNDLE) )
  119.  
  120. depend:: Makefile.dependencies $(SUBPROJECTS:.subproj=.depend) $(BUNDLES:.bproj=.depend)
  121.  
  122. $(PRODUCT_ROOT):
  123.     $(MKDIRS) $(PRODUCT_ROOT)
  124.  
  125. $(DSTROOT)$(INSTALLDIR):
  126.     $(MKDIRS) $(DSTROOT)$(INSTALLDIR)
  127.  
  128. before_install:: $(DSTROOT)$(INSTALLDIR)
  129.     $(RM) -rf $(DSTROOT)$(INSTALLDIR)/$(REL_PRODUCT_ROOT)
  130.  
  131. after_install::
  132.  
  133. # Note that the following will not correctly install a standalone
  134. # bundle under a Jasper build.  
  135.  
  136. install:: bundle before_install installhdrs $(OTHER_INSTALL_DEPENDS)
  137.     (cd $(SYMROOT); $(TAR) chf - $(REL_PRODUCT_ROOT)) | (cd $(DSTROOT)$(INSTALLDIR); $(TAR) xf -)
  138.     @somebundles=no; \
  139.     for i in $(BUNDLES:.bproj=) none ; do \
  140.         if [ $$i = none ] ; then continue; fi; \
  141.         $(ECHO) $(STRIP) $(RELOCATABLE_STRIP_OPTS) $(DSTROOT)$(INSTALLDIR)/$(REL_PRODUCT_ROOT)/$$i.bundle/$$i; \
  142.         $(STRIP) $(RELOCATABLE_STRIP_OPTS) $(DSTROOT)$(INSTALLDIR)/$(REL_PRODUCT_ROOT)/$$i.bundle/$$i; \
  143.     done; 
  144.     $(STRIP) $(RELOCATABLE_STRIP_OPTS) \
  145.             $(DSTROOT)$(INSTALLDIR)/$(REL_BUNDLE)
  146.     -$(CHOWN) -Rf $(INSTALL_AS_USER).$(INSTALL_AS_GROUP) \
  147.         $(DSTROOT)$(INSTALLDIR)/$(REL_PRODUCT_ROOT)
  148.     -$(CHMOD) -Rf go-w $(DSTROOT)$(INSTALLDIR)/$(REL_BUNDLE)
  149.     @(if [ "$(INSTALL_PERMISSIONS)" != "" ] ; then \
  150.         $(ECHO) $(CHMOD) -f $(INSTALL_PERMISSIONS) \
  151.           $(DSTROOT)$(INSTALLDIR)/$(REL_BUNDLE); \
  152.         $(CHMOD) -f $(INSTALL_PERMISSIONS) \
  153.           $(DSTROOT)$(INSTALLDIR)/$(REL_BUNDLE); \
  154.     fi)
  155.     @(evaled_rc_archs="$(RC_ARCHS)"; \
  156.     obj_dir=`echo $$evaled_rc_archs | sed 's/ /_/g'`_obj ; \
  157.     $(MAKE) after_install     "DSTROOT=$(DSTROOT)" \
  158.                        "OBJROOT=$(OBJROOT)" \
  159.                        "SYMROOT=$(SYMROOT)" \
  160.                 "PRODUCT_ROOT = $(PRODUCT_ROOT)" \
  161.                 "SYM_DIR = $(SYMROOT)/sym" \
  162.                 "OFILE_DIR = $(OBJROOT)/$$obj_dir" \
  163.                 "PROJ_CFLAGS = $(NORMAL_CFLAGS)" \
  164.                 "APP_MAKEFILE_DIR = $(APP_MAKEFILE_DIR)" \
  165.                 "RC_CFLAGS = $(RC_CFLAGS)" \
  166.                 "RC_ARCHS = $(RC_ARCHS)" )
  167.  
  168.  
  169. installhdrs::
  170.  
  171. #.DEFAULT 
  172.  
  173. help:
  174.     @if (test "$<"); then        \
  175.         $(ECHO) 'ERROR: Unrecognized Makefile target "$<"';    \
  176.     fi
  177.     @$(ECHO) 'The following targets are available:'
  178.     @$(ECHO) 
  179.     @$(ECHO) ' all         Makes the bundle target (below).  This is the default target.'
  180.     @$(ECHO) 
  181.     @$(ECHO) ' bundle      Compiles and links an optimized (and debuggable) version of the'
  182.     @$(ECHO) '             bundle into $(NAME).bundle'
  183.     @$(ECHO)     
  184.     @$(ECHO) ' depend      Generates an optional Makefile.dependencies file for every level'
  185.     @$(ECHO) '             of the bundle to reflect the complete dependency graph'
  186.     @$(ECHO) '             (including headers).'
  187.     @$(ECHO) 
  188.     @$(ECHO) ' install     Builds (if needed) and copies <BundleName>.bundle'
  189.     @$(ECHO) '             into the installation directory, setting permissions'
  190.     @$(ECHO) '             and owners as appropriate.'
  191.     @$(ECHO)     
  192.     @$(ECHO) ' installsrc  Installs the source files for the bundle into the directory'
  193.     @$(ECHO) '             specified in the SRCROOT variable in a command-line argument.'
  194.     @$(ECHO) '             Note: the target directory will be removed and recreated.'
  195.     @$(ECHO) 
  196.     @$(ECHO) ' installhdrs Installs the header files for the bundle.'
  197.     @$(ECHO) 
  198.     @$(ECHO) ' clean       Removes all files in the bundle derived from previous builds.'
  199.     @$(ECHO) 
  200.     @$(ECHO) ' help        Lists these targets with their descriptions.'
  201.     @$(ECHO) 
  202.     @$(ECHO) 'For more details, see the comments in /NextDeveloper/Makefiles/app/*.make.'
  203.